package com.yuju.group.service.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.yuju.common.core.dao.IBaseDao;
import com.yuju.common.core.service.AbstractBaseService;
import com.yuju.exception.BusinessException;
import com.yuju.group.dao.IGoodTypeDao;
import com.yuju.group.dao.entity.GoodType;
import com.yuju.group.enums.GoodTypeReturnCodeEnum;
import com.yuju.group.model.GoodTypeModel;
import com.yuju.group.service.IGoodTypeService;
import com.yuju.hotel.model.GoodModel;
import com.yuju.hotel.service.IGoodService;
import com.yuju.util.Utils;

/**
 * 
 * 类名：GoodTypeServiceImpl  <br />
 *
 * 功能：
 *
 * @author : zhousc <br />
 * @Date : 2017年11月30日 上午8:56:15  <br />
 * @version : 1.1 <br />
 */
@Service
public class GoodTypeServiceImpl extends AbstractBaseService<GoodTypeModel, GoodType, String> implements IGoodTypeService{

	@Autowired
	private IGoodTypeDao goodTypeDao;
	@Autowired
	private IGoodService goodService;
	
	@Override
	public IBaseDao<GoodTypeModel, GoodType, String> getDao() {
		// TODO Auto-generated method stub
		return goodTypeDao;
	}

	/**
	 * 
	 * 功能:新增商品分类 <br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年11月30日 上午8:57:41<br/>
	 * 
	 * @param goodTypeModel
	 * @return <br/>
	 * @see com.yuju.common.core.service.AbstractBaseService#save(java.lang.Object)
	 */
	@Override
	public int save(GoodTypeModel goodTypeModel){
		goodTypeModel.setId(Utils.getUUID());
		goodTypeModel.setGmtCreate(new Date());
		goodTypeModel.setGmtModified(new Date());
		return this.getDao().saveSelective(goodTypeModel);
	}
	
	/**
	 * 
	 * 功能: 商品分类更新<br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年11月30日 上午8:58:00<br/>
	 * 
	 * @param goodTypeModel
	 * @return <br/>
	 * @see com.yuju.common.core.service.AbstractBaseService#updateSelective(java.lang.Object)
	 */
	@Override
	public int updateSelective(GoodTypeModel goodTypeModel){
		goodTypeModel.setGmtModified(new Date());
		return this.getDao().updateSelective(goodTypeModel);
	}
	
	/**
	 * 
	 * 功能: 删除商品分类<br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年11月30日 上午10:25:18<br/>
	 * 
	 * @param id
	 * @return <br/>
	 * @see com.yuju.common.core.service.AbstractBaseService#del(java.lang.Object)
	 */
	@Override
	public int del(String id){
		
		//首先判断该商品分类下是否有商品
		GoodModel goodModel = new GoodModel();
		goodModel.setGoodTypeId(id);
		List<GoodModel> goodList = goodService.list(goodModel);
		//判断商品集合是否为空，为空执行删除，不为空返回，提示前台不可删除
		if(Utils.isNotNull(goodList) && !goodList.isEmpty()){
			throw new BusinessException(GoodTypeReturnCodeEnum.GOODTYPE_DEL_FAILURE.getCode(), GoodTypeReturnCodeEnum.GOODTYPE_DEL_FAILURE.getDesc());
		}
		return this.getDao().del(id);
	}

	/**
	 * 
	 * 功能:重名验证 <br/>
	 * 
	 * 重写：zhousc <br/>
	 * 
	 * @Date ：2017年12月13日 下午1:47:22<br/>
	 * 
	 * @param goodTypeModel
	 * @return <br/>
	 * @see com.yuju.group.service.IGoodTypeService#selectByName(com.yuju.group.model.GoodTypeModel)
	 */
	@Override
	public boolean selectByName(GoodTypeModel goodTypeModel) {
		//定义返回值
		boolean result = false;
		//装载数据查询数据库
		GoodTypeModel model = new GoodTypeModel();
		model.setName(goodTypeModel.getName());
		model.setSaleType(goodTypeModel.getSaleType());
		model.setGroupId(goodTypeModel.getGroupId());
		
		//修改时验证重名
		if (Utils.isNotNull(goodTypeModel.getId())) {
			GoodTypeModel goodTypeModel1 = convert(this.getDao().getObj(goodTypeModel.getId()));
			if (goodTypeModel.getName().equals(goodTypeModel1.getName())) {
                result = true;
            } else {
           	 	Map<Object, Object> beanMap = getBeanMap(model);
                List<GoodTypeModel> list = this.getDao().list(beanMap);
                if (list.size() == 0) {
                    result = true;
                }
            }
		//新增验证重名
		}else {
			Map<Object, Object> beanMap = getBeanMap(model);
            List<GoodTypeModel> list = this.getDao().list(beanMap);
            if (list.size() == 0) {
                result = true;
            }
        }
		return result;
	}
	
	
}
